home *** CD-ROM | disk | FTP | other *** search
- package javax.swing;
-
- import java.awt.Component;
- import java.awt.Container;
- import java.awt.Dimension;
- import java.awt.Frame;
- import java.awt.GraphicsConfiguration;
- import java.awt.Insets;
- import java.awt.KeyboardFocusManager;
- import java.awt.Point;
- import java.awt.Rectangle;
- import java.awt.Toolkit;
- import java.awt.Window;
- import java.awt.event.FocusListener;
- import java.awt.event.MouseAdapter;
- import java.awt.event.MouseEvent;
- import java.awt.event.MouseMotionListener;
-
- public class ToolTipManager extends MouseAdapter implements MouseMotionListener {
- Timer enterTimer = new Timer(750, new insideTimerAction(this));
- Timer exitTimer;
- Timer insideTimer;
- String toolTipText;
- Point preferredLocation;
- JComponent insideComponent;
- MouseEvent mouseEvent;
- boolean showImmediately;
- static final ToolTipManager sharedInstance = new ToolTipManager();
- transient Popup tipWindow;
- private Window window;
- JToolTip tip;
- private Rectangle popupRect = null;
- private Rectangle popupFrameRect = null;
- boolean enabled = true;
- private boolean tipShowing = false;
- private KeyStroke postTip;
- private KeyStroke hideTip;
- private Action postTipAction;
- private Action hideTipAction;
- private FocusListener focusChangeListener = null;
- private MouseMotionListener moveBeforeEnterListener = null;
- protected boolean lightWeightPopupEnabled = true;
- protected boolean heavyWeightPopupEnabled = false;
-
- ToolTipManager() {
- this.enterTimer.setRepeats(false);
- this.exitTimer = new Timer(500, new outsideTimerAction(this));
- this.exitTimer.setRepeats(false);
- this.insideTimer = new Timer(4000, new stillInsideTimerAction(this));
- this.insideTimer.setRepeats(false);
- this.postTip = KeyStroke.getKeyStroke(112, 2);
- this.postTipAction = new Actions(javax.swing.ToolTipManager.Actions.access$000());
- this.hideTip = KeyStroke.getKeyStroke(27, 0);
- this.hideTipAction = new Actions(javax.swing.ToolTipManager.Actions.access$100());
- this.moveBeforeEnterListener = new MoveBeforeEnterListener(this, (1)null);
- }
-
- public void setEnabled(boolean var1) {
- this.enabled = var1;
- if (!var1) {
- this.hideTipWindow();
- }
-
- }
-
- public boolean isEnabled() {
- return this.enabled;
- }
-
- public void setLightWeightPopupEnabled(boolean var1) {
- this.lightWeightPopupEnabled = var1;
- }
-
- public boolean isLightWeightPopupEnabled() {
- return this.lightWeightPopupEnabled;
- }
-
- public void setInitialDelay(int var1) {
- this.enterTimer.setInitialDelay(var1);
- }
-
- public int getInitialDelay() {
- return this.enterTimer.getInitialDelay();
- }
-
- public void setDismissDelay(int var1) {
- this.insideTimer.setInitialDelay(var1);
- }
-
- public int getDismissDelay() {
- return this.insideTimer.getInitialDelay();
- }
-
- public void setReshowDelay(int var1) {
- this.exitTimer.setInitialDelay(var1);
- }
-
- public int getReshowDelay() {
- return this.exitTimer.getInitialDelay();
- }
-
- void showTipWindow() {
- if (this.insideComponent != null && this.insideComponent.isShowing()) {
- String var1 = UIManager.getString("ToolTipManager.enableToolTipMode");
- if ("activeApplication".equals(var1)) {
- KeyboardFocusManager var2 = KeyboardFocusManager.getCurrentKeyboardFocusManager();
- if (var2.getFocusedWindow() == null) {
- return;
- }
- }
-
- if (this.enabled) {
- Point var3 = this.insideComponent.getLocationOnScreen();
- Point var4 = new Point();
- GraphicsConfiguration var5 = this.insideComponent.getGraphicsConfiguration();
- Rectangle var6 = var5.getBounds();
- Insets var7 = Toolkit.getDefaultToolkit().getScreenInsets(var5);
- var6.x += var7.left;
- var6.y += var7.top;
- var6.width -= var7.left + var7.right;
- var6.height -= var7.top + var7.bottom;
- boolean var8 = SwingUtilities.isLeftToRight(this.insideComponent);
- this.hideTipWindow();
- this.tip = this.insideComponent.createToolTip();
- this.tip.setTipText(this.toolTipText);
- Dimension var12 = this.tip.getPreferredSize();
- if (this.preferredLocation != null) {
- var4.x = var3.x + this.preferredLocation.x;
- var4.y = var3.y + this.preferredLocation.y;
- if (!var8) {
- var4.x -= var12.width;
- }
- } else {
- var4.x = var3.x + this.mouseEvent.getX();
- var4.y = var3.y + this.mouseEvent.getY() + 20;
- if (!var8 && var4.x - var12.width >= 0) {
- var4.x -= var12.width;
- }
- }
-
- if (this.popupRect == null) {
- this.popupRect = new Rectangle();
- }
-
- this.popupRect.setBounds(var4.x, var4.y, var12.width, var12.height);
- if (var4.x < var6.x) {
- var4.x = var6.x;
- } else if (var4.x - var6.x + var12.width > var6.width) {
- var4.x = var6.x + Math.max(0, var6.width - var12.width);
- }
-
- if (var4.y < var6.y) {
- var4.y = var6.y;
- } else if (var4.y - var6.y + var12.height > var6.height) {
- var4.y = var6.y + Math.max(0, var6.height - var12.height);
- }
-
- PopupFactory var9 = PopupFactory.getSharedInstance();
- if (this.lightWeightPopupEnabled) {
- int var10 = this.getPopupFitHeight(this.popupRect, this.insideComponent);
- int var11 = this.getPopupFitWidth(this.popupRect, this.insideComponent);
- if (var11 <= 0 && var10 <= 0) {
- var9.setPopupType(0);
- } else {
- var9.setPopupType(1);
- }
- } else {
- var9.setPopupType(1);
- }
-
- this.tipWindow = var9.getPopup(this.insideComponent, this.tip, var4.x, var4.y);
- var9.setPopupType(0);
- this.tipWindow.show();
- Window var13 = SwingUtilities.windowForComponent(this.insideComponent);
- this.window = SwingUtilities.windowForComponent(this.tip);
- if (this.window != null && this.window != var13) {
- this.window.addMouseListener(this);
- } else {
- this.window = null;
- }
-
- this.insideTimer.start();
- this.tipShowing = true;
- }
-
- }
- }
-
- void hideTipWindow() {
- if (this.tipWindow != null) {
- if (this.window != null) {
- this.window.removeMouseListener(this);
- this.window = null;
- }
-
- this.tipWindow.hide();
- this.tipWindow = null;
- this.tipShowing = false;
- this.tip = null;
- this.insideTimer.stop();
- }
-
- }
-
- public static ToolTipManager sharedInstance() {
- return sharedInstance;
- }
-
- public void registerComponent(JComponent var1) {
- var1.removeMouseListener(this);
- var1.addMouseListener(this);
- var1.removeMouseMotionListener(this.moveBeforeEnterListener);
- var1.addMouseMotionListener(this.moveBeforeEnterListener);
- if (this.shouldRegisterBindings(var1)) {
- InputMap var2 = var1.getInputMap(0);
- ActionMap var3 = var1.getActionMap();
- if (var2 != null && var3 != null) {
- var2.put(this.postTip, "postTip");
- var2.put(this.hideTip, "hideTip");
- var3.put("postTip", this.postTipAction);
- var3.put("hideTip", this.hideTipAction);
- }
- }
-
- }
-
- public void unregisterComponent(JComponent var1) {
- var1.removeMouseListener(this);
- var1.removeMouseMotionListener(this.moveBeforeEnterListener);
- if (this.shouldRegisterBindings(var1)) {
- InputMap var2 = var1.getInputMap(0);
- ActionMap var3 = var1.getActionMap();
- if (var2 != null && var3 != null) {
- var2.remove(this.postTip);
- var2.remove(this.hideTip);
- var3.remove("postTip");
- var3.remove("hideTip");
- }
- }
-
- }
-
- private boolean shouldRegisterBindings(JComponent var1) {
- InputMap var2;
- for(var2 = var1.getInputMap(0, false); var2 != null && var2.size() == 0; var2 = var2.getParent()) {
- }
-
- return var2 != null;
- }
-
- public void mouseEntered(MouseEvent var1) {
- this.initiateToolTip(var1);
- }
-
- private void initiateToolTip(MouseEvent var1) {
- if (var1.getSource() != this.window) {
- JComponent var2 = (JComponent)var1.getSource();
- var2.removeMouseMotionListener(this.moveBeforeEnterListener);
- this.exitTimer.stop();
- Point var3 = var1.getPoint();
- if (var3.x >= 0 && var3.x < var2.getWidth() && var3.y >= 0 && var3.y < var2.getHeight()) {
- if (this.insideComponent != null) {
- this.enterTimer.stop();
- }
-
- var2.removeMouseMotionListener(this);
- var2.addMouseMotionListener(this);
- boolean var4 = this.insideComponent == var2;
- this.insideComponent = var2;
- if (this.tipWindow != null) {
- this.mouseEvent = var1;
- if (this.showImmediately) {
- String var5 = var2.getToolTipText(var1);
- Point var6 = var2.getToolTipLocation(var1);
- boolean var7 = this.preferredLocation != null ? this.preferredLocation.equals(var6) : var6 == null;
- if (!var4 || !this.toolTipText.equals(var5) || !var7) {
- this.toolTipText = var5;
- this.preferredLocation = var6;
- this.showTipWindow();
- }
- } else {
- this.enterTimer.start();
- }
- }
-
- }
- }
- }
-
- public void mouseExited(MouseEvent var1) {
- boolean var2 = true;
- if (this.insideComponent == null) {
- }
-
- if (this.window != null && var1.getSource() == this.window) {
- Container var7 = this.insideComponent.getTopLevelAncestor();
- Point var8 = var1.getPoint();
- SwingUtilities.convertPointToScreen(var8, this.window);
- var8.x -= var7.getX();
- var8.y -= var7.getY();
- var8 = SwingUtilities.convertPoint((Component)null, var8, this.insideComponent);
- if (var8.x >= 0 && var8.x < this.insideComponent.getWidth() && var8.y >= 0 && var8.y < this.insideComponent.getHeight()) {
- var2 = false;
- } else {
- var2 = true;
- }
- } else if (var1.getSource() == this.insideComponent && this.tipWindow != null) {
- Window var3 = SwingUtilities.getWindowAncestor(this.insideComponent);
- if (var3 != null) {
- Point var4 = SwingUtilities.convertPoint(this.insideComponent, var1.getPoint(), var3);
- Rectangle var5 = this.insideComponent.getTopLevelAncestor().getBounds();
- var4.x += var5.x;
- var4.y += var5.y;
- Point var6 = new Point(0, 0);
- SwingUtilities.convertPointToScreen(var6, this.tip);
- var5.x = var6.x;
- var5.y = var6.y;
- var5.width = this.tip.getWidth();
- var5.height = this.tip.getHeight();
- if (var4.x >= var5.x && var4.x < var5.x + var5.width && var4.y >= var5.y && var4.y < var5.y + var5.height) {
- var2 = false;
- } else {
- var2 = true;
- }
- }
- }
-
- if (var2) {
- this.enterTimer.stop();
- if (this.insideComponent != null) {
- this.insideComponent.removeMouseMotionListener(this);
- }
-
- this.insideComponent = null;
- this.toolTipText = null;
- this.mouseEvent = null;
- this.hideTipWindow();
- this.exitTimer.restart();
- }
-
- }
-
- public void mousePressed(MouseEvent var1) {
- this.hideTipWindow();
- this.enterTimer.stop();
- this.showImmediately = false;
- this.insideComponent = null;
- this.mouseEvent = null;
- }
-
- public void mouseDragged(MouseEvent var1) {
- }
-
- public void mouseMoved(MouseEvent var1) {
- if (this.tipShowing) {
- this.checkForTipChange(var1);
- } else if (this.showImmediately) {
- JComponent var2 = (JComponent)var1.getSource();
- this.toolTipText = var2.getToolTipText(var1);
- if (this.toolTipText != null) {
- this.preferredLocation = var2.getToolTipLocation(var1);
- this.mouseEvent = var1;
- this.insideComponent = var2;
- this.exitTimer.stop();
- this.showTipWindow();
- }
- } else {
- this.insideComponent = (JComponent)var1.getSource();
- this.mouseEvent = var1;
- this.toolTipText = null;
- this.enterTimer.restart();
- }
-
- }
-
- private void checkForTipChange(MouseEvent var1) {
- JComponent var2 = (JComponent)var1.getSource();
- String var3 = var2.getToolTipText(var1);
- Point var4 = var2.getToolTipLocation(var1);
- if (var3 == null && var4 == null) {
- this.toolTipText = null;
- this.preferredLocation = null;
- this.mouseEvent = null;
- this.insideComponent = null;
- this.hideTipWindow();
- this.enterTimer.stop();
- this.exitTimer.restart();
- } else {
- this.mouseEvent = var1;
- if ((var3 != null && var3.equals(this.toolTipText) || var3 == null) && (var4 != null && var4.equals(this.preferredLocation) || var4 == null)) {
- if (this.tipWindow != null) {
- this.insideTimer.restart();
- } else {
- this.enterTimer.restart();
- }
- } else {
- this.toolTipText = var3;
- this.preferredLocation = var4;
- if (this.showImmediately) {
- this.hideTipWindow();
- this.showTipWindow();
- this.exitTimer.stop();
- } else {
- this.enterTimer.restart();
- }
- }
- }
-
- }
-
- static Frame frameForComponent(Component var0) {
- while(!(var0 instanceof Frame)) {
- var0 = ((Component)var0).getParent();
- }
-
- return (Frame)var0;
- }
-
- private FocusListener createFocusChangeListener() {
- return new 1(this);
- }
-
- private int getPopupFitWidth(Rectangle var1, Component var2) {
- if (var2 != null) {
- for(Container var3 = var2.getParent(); var3 != null; var3 = var3.getParent()) {
- if (var3 instanceof JFrame || var3 instanceof JDialog || var3 instanceof JWindow) {
- return this.getWidthAdjust(var3.getBounds(), var1);
- }
-
- if (var3 instanceof JApplet || var3 instanceof JInternalFrame) {
- if (this.popupFrameRect == null) {
- this.popupFrameRect = new Rectangle();
- }
-
- Point var4 = var3.getLocationOnScreen();
- this.popupFrameRect.setBounds(var4.x, var4.y, var3.getBounds().width, var3.getBounds().height);
- return this.getWidthAdjust(this.popupFrameRect, var1);
- }
- }
- }
-
- return 0;
- }
-
- private int getPopupFitHeight(Rectangle var1, Component var2) {
- if (var2 != null) {
- for(Container var3 = var2.getParent(); var3 != null; var3 = var3.getParent()) {
- if (var3 instanceof JFrame || var3 instanceof JDialog || var3 instanceof JWindow) {
- return this.getHeightAdjust(var3.getBounds(), var1);
- }
-
- if (var3 instanceof JApplet || var3 instanceof JInternalFrame) {
- if (this.popupFrameRect == null) {
- this.popupFrameRect = new Rectangle();
- }
-
- Point var4 = var3.getLocationOnScreen();
- this.popupFrameRect.setBounds(var4.x, var4.y, var3.getBounds().width, var3.getBounds().height);
- return this.getHeightAdjust(this.popupFrameRect, var1);
- }
- }
- }
-
- return 0;
- }
-
- private int getHeightAdjust(Rectangle var1, Rectangle var2) {
- return var2.y >= var1.y && var2.y + var2.height <= var1.y + var1.height ? 0 : var2.y + var2.height - (var1.y + var1.height) + 5;
- }
-
- private int getWidthAdjust(Rectangle var1, Rectangle var2) {
- return var2.x >= var1.x && var2.x + var2.width <= var1.x + var1.width ? 0 : var2.x + var2.width - (var1.x + var1.width) + 5;
- }
-
- private void show(JComponent var1) {
- if (this.tipWindow != null) {
- this.hideTipWindow();
- this.insideComponent = null;
- } else {
- this.hideTipWindow();
- this.enterTimer.stop();
- this.exitTimer.stop();
- this.insideTimer.stop();
- this.insideComponent = var1;
- if (this.insideComponent != null) {
- this.toolTipText = this.insideComponent.getToolTipText();
- this.preferredLocation = new Point(10, this.insideComponent.getHeight() + 10);
- this.showTipWindow();
- if (this.focusChangeListener == null) {
- this.focusChangeListener = this.createFocusChangeListener();
- }
-
- this.insideComponent.addFocusListener(this.focusChangeListener);
- }
- }
-
- }
-
- private void hide(JComponent var1) {
- this.hideTipWindow();
- var1.removeFocusListener(this.focusChangeListener);
- this.preferredLocation = null;
- this.insideComponent = null;
- }
-
- // $FF: synthetic method
- static void access$300(ToolTipManager var0, MouseEvent var1) {
- var0.initiateToolTip(var1);
- }
-
- // $FF: synthetic method
- static FocusListener access$400(ToolTipManager var0) {
- return var0.focusChangeListener;
- }
-
- // $FF: synthetic method
- static void access$500(ToolTipManager var0, JComponent var1) {
- var0.show(var1);
- }
-
- // $FF: synthetic method
- static void access$600(ToolTipManager var0, JComponent var1) {
- var0.hide(var1);
- }
-
- // $FF: synthetic method
- static boolean access$700(ToolTipManager var0) {
- return var0.tipShowing;
- }
- }
-